#include <bits/stdc++.h>
#define ll long long
using namespace std;

const int Maxn=1010;
const int Mod=1e9+7;
int n,K;
char S[Maxn];
int s[Maxn],a[Maxn];
ll f[Maxn][Maxn][2],g[Maxn][Maxn][2];

inline void upd(ll &x,ll y){
	x+=y;
	x%=Mod;
}
int tot;

inline ll solve(int t){
	memset(f,0,sizeof f);
	memset(g,0,sizeof g);
	
	g[1][0][1]=1,f[1][0][1]=1;
	
	for(int i=1;i<n;i++){
		for(int j=0;j<=i;j++){
			int nt=(t^(j&1));
			for(int k=0;k<2;k++){
				int e=(k?a[i+1]:1);
				for(int l=0;l<=e;l++){
					int nk=(k and l==e);
					int ns=(nt^s[i]);	
					upd(g[i+1][j+(l!=ns)][nk],g[i][j][k]);
					
					if(!l){
						upd(f[i+1][j+(l!=ns)][nk],f[i][j][k]*2);
					}
					else{
						upd(f[i+1][j+(l!=ns)][nk],f[i][j][k]*2+g[i][j][k]);
					}
				}
			}
		}
	}
	
//	++tot;
//	cout<<"now:"<<tot<<"\n";
//	
//	for(int i=1;i<=n;i++)
//		for(int j=0;j<=min(i,K);j++)
//			for(int l=0;l<=1;l++)
//				cout<<i<<' '<<j<<" "<<l<<" "<<f[i][j][l]<<" "<<g[i][j][l]<<"\n";
	
	return (f[n][K][0]+f[n][K][1])%Mod;
}

inline void Rev(){
	for(int i=1;i<n;i++) s[i]^=1;
}

int main(){
	freopen("lost.in","r",stdin);
	freopen("lost.out","w",stdout);
	
	scanf("%d%d",&n,&K);
	scanf("%s",S+1);
	for(int i=1;i<n;i++){
		if(S[i]=='L') s[i]=0; else s[i]=1;
	}
	
	ll ans=0;
	for(int i=1;i<=n;i++) scanf("%1d",&a[i]); 
	for(int i=1;i<=n;i++) ans=(ans*2+a[i])%Mod;
	
	ll v1=solve(0); v1+=solve(1); 
	for(int i=1;i<=n;i++) scanf("%1d",&a[i]); ll v2=solve(1); v2+=solve(0);
	
	ans=(ans+v2-v1+Mod)%Mod;
	printf("%lld",ans);
	
	return 0;
}
/*
3 0
LR
101
110

2 0
L
10
11

4 2
LRR
1010
1110

5 2
RLLR
10010
10111


*/
